Hi Kevin
There are a number of ways you could optimize this; some that spring to mind would be pretty funky and esoteric threading alternatives so, maybe we shouldn't go down that route 
It seems that the problem is the query/load time coupled with the additional process time. By far the fastest way to read the data is by using an ADO.Net DataReader.
I have attached a sample.txt file with my attempt at VB (I am a VFP/C# guy) so, it may be buggy but you should get the gist of it. Also, I have referred to SQL as the dataprovider so, you should replace these references with the appropriate ones that you currently use for Access.
The solution is that you essentially "For Each" the DataReader instance and get an IDataRecord. You then cast this to a DataRow. The DataRow can be processed in whatever way you want and then after processing it, you simply add the row to the CurrentDataTable of your BO.
So, in this way, you process the record as you read it (and the DataReader is extremely fast at reading your data in the first place). I'm sorry, I haven't actually tried/tested this code but, I am pretty certain that, bad syntax apart, it should work for you.
FYI, the CurrentDataTable property of the BO is simply a reference to the inner DataTable. Also in the sample code, I have included a way to access the "default" connection string used by StrataFrame so, you don't have to worry about re-specifying it.
Let me know if you are confused with any of this and I will try and explain further.
HTH
Best
-=Gary