Применять низкоуровневый язык, когда можно обойтись управляемым, на мой взгляд расточительство, по отношению к рабочему времени программиста. Один маааааленький забытый где-то мемори лик обеспечит вам много часов отладки. Используйте C# (mono) или Java.
Нагрузка 2000-2500 не такая уж запредельная. В крайнем случае сделаете кластер из n серверов. Это куда проще чем пытаться выиграть несколько процентов производительности используя низкоуровневый язык, при этом имея приличную вероятность сесть в лужу.
Во избежание холиваров:
Я не утверждаю, что любая программа на Java или C# работает также быстро как на C++. Я утверждаю что _хорошая_ программа на Java\C# работает ненамного дольше чем _хороший_ аналог на C++. Управляемые языки, так же как C++ имеют свои особенности, которые надо учитывать, и тогда производительность будет весьма приличной.