Звучит так, как будто вы хотите trie - он выполняет тот тип сжатия, который вы описываете, сохраняя каждый префикс только один раз.
Я предполагаю, что у вас достаточно памяти для хранения«миллиарды» ключей, и, конечно же, вам нужно быть в 64-битной системе, чтобы иметь возможность обрабатывать даже столько элементов в первую очередь.