Зависит от типа приложения и масштаба данных. У каждого есть недостатки.
1a) Отдельные базы данных + один экземпляр WCF / клиент. Синхронизация всего будет сложной задачей. Как вы одновременно обновляете X серверов БД, что если один из них вышел из строя и теперь не синхронизирован и не совместим с уровнем клиент / WCF?
1b) «Силосы», отдельная БД / WCF / Клиент для каждого клиента. У вас нет проблемы с синхронизацией, но у вас есть накладные расходы на управление множеством разных экземпляров каждого слоя. Также вам придется взглянуть на лицензирование SQL, я не могу вспомнить, лицензируются ли отдельные экземпляры SQL отдельно ($$$). Даже если вы можете установить столько экземпляров, сколько захотите, накладные расходы нескольких экземпляров не будут тривиальными после определенного момента.
3) В основном те же проблемы, что и 1a / b, за исключением лицензирования.
2) Лучший сценарий обновления / управления. Вы правы в том, что поддержание изоляции данных представляет собой серьезную проблему (1a технически разделяет эту проблему на более высоком уровне). Другая проблема заключается в том, что если ваше приложение интенсивно использует данные, вам нужно беспокоиться о масштабируемости данных. Например, если ожидается, что каждый клиент будет иметь десятки / сотни миллионов строк данных. Затем вы начнете сталкиваться с проблемами и производительностью запросов для отдельных клиентов из-за общего объема клиентской базы. Клиенты более терпимы к замедлениям, вызванным их собственным объемом данных. Говорят, что это медленно, потому что данные других 99 клиентов велики, как правило, не нужно.
Если вы точно не знаете, что с самого начала вы будете иметь дело с огромными объемами данных, я бы, вероятно, сейчас остановился на # 2 и начал бы рассматривать кластеризацию или переход к настройке 1a / b, если это потребуется в будущем.