Une façon serait d'utiliser une «table de calendrier», ou si vous n'êtes jamais intéressé que par un jour, une «table d'horloge» ferait l'affaire. Ce qui suit illustre (à peu près) comment vous l'utiliseriez.
SELECT clock.time AS available
FROM clock
LEFT JOIN bookings ON clock.time BETWEEN bookings.from AND bookings.to
AND bookings.date = '2013-01-01'
WHERE bookings.id IS NULL
http://www.brianshowalter.com/calendar_tables est un exemple de comment créer un calendrier dans MySQL