Если кому интересно, то после многочасовых раздумий

мне все-таки удалось кое-что придумать.
А именно, избавиться от главного узкого места — подчиненного запроса в q2. Вместо того, чтобы вычислять максимальную дату для каждой записи q2 с помощью подчиненного запроса, строится отдельный запрос, разом находящий максимальную дату для каждого id1. Вроде все работает... и никаких тормозов
q1
PARAMETERS prmDate DateTime;
SELECT t1.id1, max(t2.data) AS MaxDate
FROM t1 INNER JOIN t2 ON t1.id2 = t2.id2
WHERE t2.date <= prmDate
GROUP BY t1.id1
q2
SELECT q1.id1, t2.id2
FROM q1 INNER JOIN t2 WHERE q1.MaxDate = t2.date