Лучшее враг хорошего. Зачем заниматься преждевременной оптимизацией? Для бд 2млн строк, как собственно и 10млн и даже 100млн это далеко не проблема. А в этой предметной области основная нагрузка будет на чтение, а не запись, значит довольно легко решается масштабированием реплик для чтения и даже банальным кешированием.
Чтоб получить элегантное решение достаточно просто заложить возможность смены этого алгоритма без переписывания всего и вся