il file di txt da cui leggo è di 130MB (circa 2 milioni di righe)
Questo è il problema maggiore, impiegherà sempre tanto tempo la tua procedura. Troppo grande il file da trattare.

Pensavo che il fatto di dover aprire e chiudere continuamente una query fosse più lento che tenere una tabella aperta e scorrerla.
Non devi aprire e chiudere nulla, devi usare l'oggetto connection per farti ritornare il recorset, vuoto o pieno dipende se la where è soddisfatta o meno. Tu invece cicli ad ogni iterazione i recordset fino a quando non trovi cio' che ti interessa, e questo non credi che sia lento rispetto ad una select mirata?

Quanto a popolare la tabella via sql, ci devo lavorare un pochino.
Si tratta di fare una semplice insert con l'oggetto connection.