Поскольку вы делаете простую вставку и не получаете большой выгоды от использования LinqToSql, взгляните на SqlBulkCopy , она удалит большинство циклов и уменьшит накладные расходы на стороне сервера Sql, так как Что ж. Вы должны будете сделать очень мало изменений в коде, чтобы использовать его.
Также обратите внимание на предварительную сортировку данных по столбцу, по которому таблица индексируется, поскольку это приведет к лучшему обращению к кэшу при обновлении таблицы SQL-сервером.
Также подумайте, нужно ли вам загружать данные во временную промежуточную таблицу, которая не проиндексирована, а затем в сохраненный процесс для вставки в основную таблицу одним оператором sql. Это может позволить SqlServer распространить работу по индексированию на все ваши процессоры.