I am not recommending that you do this, but to show you why you'd want to split this up into multiple columns as @deceze recommended.
You can use mysql's STR_TO_DATE() to (kindof) convert the string to a date. Note that it completely ignores the first part of the time range, so it's effectively sorting on:
11:00 am
9:00 am
7:30 pm
2:30 pm
The query is:
SELECT
time,
STR_TO_DATE(time,'%h:%i-%h:%i %p')
FROM time_table
ORDER BY STR_TO_DATE(time,'%h:%i-%h:%i %p') ASC
A second query that effectively sorts on this:
9:00am
7:00am
6:30pm
1:00pm
is:
SELECT
time,
STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p')
FROM time_table
ORDER BY STR_TO_DATE(CONCAT(SUBSTRING_INDEX(time,'-',1), SUBSTRING(time,LOCATE(' ', time)+1)), '%h:%i%p') ASC
(I'm certain someone that's more proficient with regular expressions would be able to shorten this one).