C# сервер без привязки к конкретной базе данных — как реализовать?
Хорошо описано у Троелсона в "С# 5.0 и платформа .NET 4.5".  Там в главе 21 есть параграф "Абстрагирование поставщиков данных с помощью интерфесов". Там как раз о фабриках рассказывается, вынесении строки подключения в XML-конфиг и т.п. Советую заглянуть.
А вообще, DAL можно реализовать отдельной библиотекой, которая будет торчать наружу через интерфейсы, да базовые классы. Ее отдельно можно будет спокойно перекомпилять без боли.
Так делать можно, есть готовые сторонние библиотеки (почти все платные, насколько знаю). msdn.microsoft.com/en-us/data/dd363565.aspx