Der QDBGETMQ0 erstellt wohl eine "Materialized Query Table" was je nach Umfang schon mal dauert.
Interessant wäre also wirklich, wie dein dynamischer SQL denn aussieht.
Auch wenn Indizes genommen werden heißt das nicht, dass das schnell gehen muss.
Es kommt halt auf de Datenmenge an.

select a.f1, b.f1
from filea a
inner join fileb b on a.key=b.key
where a.x1 = 'X' and b.x1 >= 'Y' and b.x2 <> 'Z'

Wenn nun in filea der Wert X 1.000 mal vorkommt und in fileb der wert Y nur 10 mal, müssen trotzdem die 1000 Sätze gelesen werden um die 990 über fileb wieder auszuschließen.
Je nach dem wie viele Joins du so bemühst, können durchaus mehrere Millionen Zugriffe (trotz Index) entstehen.
Ein Index hilft dann wirklich nicht so viel weiter, da die Anzahl Leseoperation über mehrere Tabellen einfach mal dauert.