Penso que as vantagens desta abordagem superam em muito as desvantagens.
O que você está conseguindo aqui é mais minério menos um perfeito "implementação" do Ina SOLIDpor meio do Stairwaypadrão - ou seja, sua aplicação depende "para baixo" em uma interface definida no Company.Framework.Persistence.dlle as próprias implementações individuais também dependem "para cima" nessa abstração.
Isso significa que seu aplicativo está altamente dissociado de todos os detalhes da implementação (é claro que você normalmente desejará compor o gráfico de tempo de execução real usando algum tipo de container IOC). Eu vinculei descaradamente a uma imagem existente desse padrão a partir de outra resposta sobre o assunto. no estouro de pilha:

No livro Código Adaptativo via C #, o autor fala sobre essa abordagem e a chama especificamente de algo que sempre deve ser feito, pois fornece um nível tão alto de dissociação. ( exemplo )
Outra vantagem possível é poder consertar implementações individuais sem se preocupar com o fato de você ter afetado outras pessoas, embora essa seja bastante pequena depois de ter sido diligente com seus testes de regressão; também poder implantar implementações individuais em subpastas, que também podem conter versões específicas de quaisquer dependências de terceiros de que possam precisar, provavelmente ajudará a manter as coisas bem organizadas.
A única desvantagem real que consigo pensar com essa abordagem é que é possível, em teoria, alterar a interface Company.Framework.Persistence.dll(junto com os binários do aplicativo) e deixar de atualizar as dlls de implementação correspondentes, o que levará a erros de tempo de execução para os usuários.
Tendo sido culpado de fazer exatamente isso no passado, posso dizer que isso é realmente apenas algo que pode acontecer se você for muito descuidado :)