Текстовый файл 2 мб это не так много. Я бы спарсил текстовый файл в отдельную временную таблицу (даже можно in-memory), а потом от нее делал OUTER JOIN на основную, и в тех строках, которые есть в файле, но нет в основной таблице получил бы NULL, по которому и отбирал бы то, что надо дозалить в основную таблицу.
Это более-мене адекватный и производительный способ на мой взгляд.
Разумеется должны быть индексы на соответствующие поля в обеих таблицах, и вот тут, все зависит от нескольких моментов. Во первых, если строки всегда идентичные, но длиннее 32 байт, то есть смысл добавить дополнительные поля в таблицы, загонять туда MD5 хеши строк и индексировать по хешам.
Если же в строках что-то плавает, например регистр символов, то перед вычислением хэша строки надо приводить к единому виду. Причем в таблицах помимо хэшей хранить можно и оригинальные строки, тут вопрос только о вариантах сравнения.