start_delta и end_delta типа TIME. В start_delta с помощью триггера или планировщика записываем результат вычисления TIME(start), в end_delta записываем TIMEDIFF( end, TIMESTAMP(DATE(start)) ).SELECT *
FROM my_table
WHERE
TIME('16:00:00') BETWEEN start_delta AND end_delta OR
ADDTIME( '16:00:00', '24:00:00') BETWEEN start_delta AND end_delta
start_delta и end_delta.