¿Has hecho un echo de la consulta generada? En txtBusqueda veo un fallo, te falta unos parentesis, la consulta deberia ser algo como :
Código PHP:
$where .= ("AND (establecimientos.nombre LIKE '%" . $_POST['txtBusqueda'] . "%'
OR establecimientos.direccion LIKE '%" . $_POST['txtBusqueda'] . "%') ");
Es por la prioridad de operadores, tal como tu lo tenias estabas haciendo:
AND cond1 OR (cond2 AND cond3 AND cond4)
que es basta con que cond1 sea true para ser true.
Primero busca la consulta que de los resultados correctos, y luego busca el codigo para generarla.