Как распараллелить парсинг и загрузку в БД на php?
updateOrInsert несовместим с "собирать в ОЗУ". Он тупо делает select а потом insert.
Хз сколько это 2гб в записях. Если до нескольких миллионов - то тупо делаете пачками по 3-5 тыс. select, потом insert недубликатов такими же пачками по 3-5кж
Если больше - делаете тоже самое, но разбиваете файл на несколько и раздаете задачи джобам.
2. БД нужно не просто записать, а прогнать по всей БД, найти есть ли такая запись и после уже обовить или записать.
Только это  может быть медленным, читать файл не проблема.
Насколько медленно работает вставка? - активизируйте  slow query log и посмотрите. С использованием индекса эта операция должна быть быстрой. Если нет - надо оптимизировать.