Altere seu front end para usar NOLOCK ou READ UNCOMMITTED ao fazer as seleções .
Você não pode NOLOCK MERGE, INSERT ou UPDATE, pois os registros devem ser bloqueados para realizar a atualização. No entanto, você pode NOLOCK os SELECTS.
Observe que você deve usar isso com cautela. Se as leituras sujas estiverem corretas, vá em frente. No entanto, se as leituras exigirem os dados atualizados, você precisará seguir um caminho diferente e descobrir exatamente por que a mesclagem de registros 3M está causando um problema.
Eu estaria disposto a apostar que a maior parte do tempo é gasto lendo dados do disco durante o comando de mesclagem e/ou trabalhando em situações de pouca memória. Você pode ser melhor simplesmente colocando mais ram em seu servidor de banco de dados.
Uma quantidade ideal seria ter memória ram suficiente para puxar todo o banco de dados para a memória conforme necessário. Por exemplo, se você tiver um banco de dados de 4 GB, certifique-se de ter 8 GB de RAM... em um servidor x64, é claro.