Das Problem ist da wohl eher die Cursor-Art.
Beim Client-Cursor hat ADO die Angewohnheit das komplette Ergebnis ins Recordset zu laden. Der Zugriff auf die RecordCount-Eigenschaft reicht dafür schon.
Wenn das Recordset also sehr groß wird, musst du ggf. einen ForewardOnly-Cursor verwenden, die CachSize/PageSize-Eigenschaften einstellen und NIEMALS vor EOF=TRUE auf die RecordCount-Eigenschaft zugreifen.
Alternativ nimm einen dynamischen Serverside-Cursor. RecordCount liefert dann allerdings immer -1 !

Wenn du das nirgends einstellen kannst, musst du den Select halt in mehrere Schritte zerlegen: Where-Bedingung und passende MaxRecords-Eigenschaft.