Então, como você descobriu, o controle de congestionamento do TCP é uma área bastante complicada.
Para este caso em particular, por causa das pequenas requisições, você vai querer tentar manter as conexões abertas o máximo possível, porque uma conexão por requisição vai levar cinco pacotes cada, enquanto você pode obter o média para um pouco mais de dois pacotes, se você mantiver conexões por aí.
NODELAY é a coisa certa para um servidor de jogo; você quer que seus 256 bytes sejam entregues imediatamente, e isso não é um segmento inteiro, então Nagle fará uma pausa a menos que você use NODELAY.
Se os seus servidores tiverem muita memória, as opções de memória não são grandes, os novos kernels têm razão.
Quanto aos algoritmos de controle de congestionamento, você avistou Westwood. A outra opção é CUBIC. Você pode apenas ir com um, ou você pode fazer alguma pesquisa e compará-los. Isso pode ser um pouco trabalhoso, mas para clientes de 10M vale a pena. Então, eu estaria olhando para executar uma simulação usando um gerador de tráfego em um Mac ou três (uma vez que eles têm a mesma implementação TCP do telefone), uma caixa Linux entre agindo como um roteador (mais sobre isso em breve) e um de seus servidores, para ver como funciona.
Agora, essa caixa intermediária do Linux deve executar ns-3 para que você possa simular um caminho mais complicado do que apenas um switch ethernet. Em seguida, você captura alguns rastreios de pacotes no fim de envio das conexões TCP e os analisa com tcptrace ou com os modos de representação gráfica tcptrace do wireshark. A documentação do tcptrace é uma boa introdução para analisar o comportamento de congestionamento do TCP.