A falta de E / S de disco implica que as consultas são alimentadas principalmente com RAM. Se de repente suas tabelas quentes não couberem mais na RAM e o servidor começar a trabalhar com os discos, você poderá ter um mau caminho. 2GB ou RAM não é muito nestes dias, mas de volta à era SQL2000, teria sido considerável. Eu estou supondo que a quantidade de dados que o aplicativo normalmente manipula é menor do que a RAM que você tem. Você pode querer olhar para a quantidade de espaço "usado" nos arquivos de dados. Isso lhe dará uma idéia de quanto RAM o banco de dados pode consumir, no pior caso. O SQL Server não mantém os dados que não precisam na RAM, mas pode ser difícil saber quais tabelas são usadas e quando.
O Hyperthreading nem sempre é útil com o SQL Server. Você pode obter um melhor desempenho ao desativá-lo. É difícil testar, porque a ativação e a desativação exigem uma reinicialização e isso é um grande incômodo em um servidor de produção.
"Centenas de milhares de consultas por minuto" se traduzem em milhares de consultas por segundo. Isso parece muito ocupado, mas grande parte desse tráfego pode ser acessado apenas pelo Access. O acesso é particularmente ruim na recuperação eficiente de conjuntos de resultados do SQL. Você pode obter um melhor desempenho desativando a configuração de paralelização do SQL Server.
Você também quer procurar por bloqueio. Jogar hardware em um problema de bloqueio nem sempre produz a melhoria dramática esperada. Se não houver muito bloqueio e as consultas forem atendidas pela RAM, em vez de pelo disco, você está basicamente confiando no grunhido do processador e em sua capacidade de extrair dados pelos canais de memória. Nesse caso, um hardware mais rápido deve proporcionar uma boa melhoria. Se você está com pressa (para superar este problema) e crescendo lentamente, isso pode ser bom o suficiente.
Como solução, a adição de hardware não é dimensionada, assim como as melhorias no banco de dados. Se você tiver um aumento no crescimento, poderá encontrar dificuldades em seu novo hardware. Outro pensamento é que os aplicativos bem-sucedidos atraem os usuários. Se o aplicativo se tornar mais responsivo, os usuários poderão ter mais chances de gerar mais relatórios do que se precisassem de um café enquanto aguardavam a conclusão do relatório.
Se o esquema do banco de dados for realmente ruim, você poderá obter alguns ganhos de desempenho simplesmente observando a indexação nas tabelas. Concentre-se em tabelas que você sabe ser consultado com frequência. Você pode usar o Profiler para ver as consultas em execução no servidor, basta avisá-lo para procurar por consultas que leiam muitos dados (como 100.000 páginas) e, em seguida, trabalhem para consultas que não leiam muito. Você mencionou que algumas das tabelas não possuem chaves. Existem chaves naturais nos dados, apenas não impostas por restrições ou índices exclusivos?
As tabelas possuem índices clusterizados? A falta de indexação agrupada pode causar todos os tipos de efeitos secundários.
Existem muitos índices não clusterizados, com muitas colunas? Isso geralmente é uma tentativa de criar muitos índices de cobertura, em vez de implementar uma estratégia de indexação mais eficiente. O SQL Server pode efetivamente criar índices de cobertura durante uma consulta, se isso fizer sentido e houver suporte a índices não clusterizados e clusterizados.
Por fim, vale a pena perguntar: A manutenção (reindexação e / ou atualização de estatísticas) está sendo feita nas tabelas?