Я думаю, что проблема в том, что вы не указываете какие-либо условия соединения для t или des, а проводите множество сравнений с ними. Таким образом, вы повторяете каждое совпадение a и b с каждой комбинацией t и des, что, вероятно, не то, что вы намерены.
Полученная таблица имеет количество строк, равное (объединение b) * t * des
Вот то, к чему сводится ваше положение where:
AND ((a.node_id = 1554 AND
((t.node_id IN 1776, 1780, 1781, 1782, 1784, 1778, 1777) AND des.att_order BETWEEN 1 AND 8)
OR (a.node_id = 1574 AND
((t.node_id IN 1779, 1576, 1577, 1710, 1711, 1712) AND des.att_order BETWEEN 1 AND 7)
...
Этот запрос довольно уродливый, но при ~ 7 тыс. Строк поворот с кучей фильтров не должен занимать больше минуты