This may be a dumb question, but is DTS an option for you?
Using a text file as the source and an table as the destination can be extremely fast. With straight ActiveX copy columns I've been loading around 700,000 records in about 9 minutes. These are not small records, either....over 150 columns, and our servers aren't that high end.
The table I'm importing to is just a staging table, no indexes and the columns are named exactly as the text file headers (this makes setting up the DTS package super easy). The options I have turned on are "use fast load", "Keep Null Values", and "Table Lock", And I've turned off "Check Constraints".
After the import I add a NONCLUSTERED index to whatever column I'll use later in my joins, then it's stored procedures for all transformations, Inserts, Updates, etc (which you can throttle if you're worried about tran log issues).