Если известно, что файлы отсортированы по id (или если их возможно предварительно отсортировать по id), то можно "сливать" в один проход, не использую БД и хэши, читая оба (или более) файла построчно и сразу формируя файл-результат (выкидывая "лишние" строки или формируя результат с "пустыми" полями в зависимости от потребностей) .
При выборе метода реализации - через БД, скрипт на bash, и т.д, я бы смотрел в первую очередь на навыки исполнителя - какое средство разработки более знакомо, то и использовать.
А как скрипт на bash поведет себя с большими файлами? Что-то меня смущают упоминаемые выше по теме GB-ты данных и миллионы записей...
Есть у меня интуитивное подозрение, что на миллионах строк хэши будут не самым лучшим в вариантом реализации... Да и памяти они сожрут немерено.