Если структура файла известна (например, файл с разделителями), то:
1. перегон в промежуточную таблицу MS SQL с использованием BULK INSERT (либо bcp) (0,5 Гб за 12 сек, 4 Гб за 1,5 мин.)
2. проверки/преобразования данных и раскладка в нужные таблички уже из промежуточной таблицы (зависит от сложности проверок/преобразований и т.п.)
Если же структура неизвестна, все несколько хуже... либо порционно читать, либо -
Memory-mapped files?