Why aren't we indexing the end time? Are we judging things based on now-3 hours < start time?  What good does the end time do from a functional stand point (i.e., we'll have events displayed that are over according to time ends).  

Would it be worth looking at auto-filling timeEnd with timeStart +3 hours, and then sorting by now < timeEnd?