Ya consegui hacer que funcionara, al final me quedo algo asi:
Código SQL
[-]
SELECT D.* FROM DIRECCIONES D
LEFT OUTER JOIN DIR_CAT C0 ON (D.COD_DIRECCION = C0.ID_DIR)
LEFT OUTER JOIN DIR_CAT C1 ON (D.COD_DIRECCION = C1.ID_DIR)
...
WHERE
(C0.ID_CAT = 1) AND
(C1.ID_CAT = 3) AND
...
Un saludo y gracias a todos por la ayuda.