Dazu müsstest du den SQL 2 Mal ausführen.
1. CommandTimeout mit 1, Auswerten der Fehlermeldung
2. CommandTimeout mit größerem Wert

Über ADO kannst du den SQL auch asynchron starten, so dass ein Weiterarbeiten möglich ist.
Über das Recordset.State kannst du abfragen, ob der Execute ggf. noch läuft.

Über die Cancel-Eigenschaft kannst du (zumindest bei der AS/400) den laufenden Befehl sogar abbrechen.

Das Connection-Object liefert über ein Ereignis, dass der SQL fertig ist und die daten abgeholt bzw. verarbeitet werdn können (je nach Cursorart).