Uma opção é alterar seu código e usar um único método centralizado para acessar as sequências de conexão. Ali, dependendo do site, você retorna a string correta para o site. Você ainda pode ter todas as informações em um único web.config, mas a string de conexão principal não teria o banco de dados codificado. Seria adicionado mais tarde.
Dependendo da estrutura do seu código, pode ser muito trabalhoso.
A maneira mais fácil seria armazenar as strings de conexão no web.config raiz, em vez do web.config do seu site.
Você teria um único site com um único web.config, mas sem uma string de conexão.
Eles estão em:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
ou qualquer versão do framework que seu pool de aplicativos esteja usando.
Você pode usar o nó do local para especificar diferentes sequências de conexão para os diferentes sites:
<location path="Site">
<connectionStrings>
<add connectionString="data source=.;integrated security=true;database=Site" name="SiteCS" />
</connectionStrings>
</location>
<location path="Site2">
<connectionStrings>
<add connectionString="data source=.;integrated security=true;database=Site2" name="SiteCS" />
</connectionStrings>
</location>
<location path="Site3">
<connectionStrings>
<add connectionString="data source=.;integrated security=true;database=Site3" name="SiteCS" />
</connectionStrings>
</location>
Você pode fazer o mesmo para outras configurações do IIS e do Dot.NET.
A desvantagem pode ser que você tenha que ser um administrador para alterar essas configurações e que, se as alterar, todos os pools de aplicativos no servidor poderão ser reiniciados.