Não há uma ótima maneira de lidar com isso em termos de desempenho. O
where
correto afirmação é:where (start <= end and :time between start and end) or
(end < start and :time not between end and start)
Claro, você não precisa usar
between
, você pode expandir isso:where (start <= end and :time >= start and :time <= end) or
(end < start and (:time <= end or :time >= start))