1. В любом серьезном приложении есть разделение слоя доступа к данным и слоя бизес-логики. Если код структурирован, то переписать нужно будет только слой доступа к данным, что всегда не более 20% кода. У меня об этом во многих лекциях есть подробнее.
2. Проблема свопа СУБД на порядок проще проблемы свопа ORM, т.к. они то и стимулируют размазывать доступ по логике.
3. Смена СУБД это свехестественный случай для крупных проектов. Все крупное крепко сидит на оптимизации и фичах конкретной СУБД
Ну меня вот довольно крупный проект. Самой аппке лет 7 наверное уже, итам наворечно всякого ( 😩). Юзалась mssql + win server ( да, да, сервера на винде, о боже! ). И, больше как вопрос антикризисной меры ( win server - надо не хило так башлять за лицуху, Mssql Тоже ) стал вопрос перехода на pgsql
Код конечно разделен, и всё такое. Но менять всё равно огромное количество. И некоторые вещи так просто, поиском по проекту, на заменишь. Вот как раз таки с ф-я БД меньше всего проблем было, т.к. почти всегда есть аналог, нашел аналог, поменял по проекту.
А одна из самых больших болей, это, например были top -> limit т.к. они пишуться в разных частях проека
По поводу свопа ОРМ, не пробовал.
Т.е. к чему я все это написал
1) Разделение было. При это всё операции с БД были вынесены отдельно, и доступ к ним был по паттерну репозиторий
2) -, не меняли
3) Крепко сидим на фичах, крупный проект, тем не менее смена необходима