O que você deve fazer é usar uma ferramenta ORM que abstraia o banco de dados para você (nHibernate), ou definir um conjunto de interfaces que representam seu DAL e, em seguida, usar uma implementação de IoC (Ninject, Castle, etc) para trocar o subjacente implementação à vontade, desde que implemente a interface.
No entanto, projetar uma interface que seja à prova de futuro (ou seja, que possa lidar com peculiaridades sutis de trabalhar com outros bancos de dados) não é simples, então você pode acabar precisando fazer alterações de qualquer maneira.
Eu faria uma de duas coisas, nesta ordem:
- Revise se você realmente precisa trocar os bancos de dados.
- Desça a rota da ferramenta ORM, pois muito trabalho braçal é feito para você.
Um bom exemplo de abstração de um banco de dados, não necessariamente o DAL per-se, é o Enterprise Library Data Access Application Block da Microsoft.