Voy a intentar hacer un resumen de este tema, sobre la base de la última consulta propuesta por @NSD.
Como bien te dice, para evitar que salgan las propiedades que estarán ocupadas durante un periodo de tiempo, tienes que filtrar con tres condiciones, si o si:
1) Fecha inicial buscada no debe estar entre el inicio y fin de una locación ya pactada.
2) Fecha final buscada no debe estar entre inicio y fin de una locación pactada.
3) El período de la vigencia de ninguna locación quedar contenido dentro del período buscado.
Personalmente, prefiero escribirla así:
Código MySQL:
Ver original (dia_entrada
<= '2014-03-02' AND dia_salida
>= '2014-03-08'));
SI a esto le agregas un índice en la tabla DISPONIBILIDAD sobre el par (dia_entrada, dia_salida), tendrás una buena optimización