Так вроде бы проблем нет.
Отельер в таблице указывает даты, когда номер может быть забронирован.
типа
outdate indate room
20-01-2015 22-01-2015 125
Делаем просто в два этапа.
1) выбираем все номера за свободный промежуток
select * from freerooms where outdate between 20-01-2015 and 23-01-2015 and indate between 20-01-2015 and 23-01-2015
2) Получив список (он будет небольшим, даже для гостиницы в 10000 номеров), программно проходим по массиву номеров и дополнительно подыскиваем по требуемому времени.
Это все конечно приблизительно, но испытать можно за 20 минут.