Esta solução realmente parece ser bem robusta para o problema, já me vi em uma situação idêntica a qual você usou como exemplo, no caso eu tomei a decisão de usar uma coluna tipo e com base nela a minha foreign_key se tornava dinâmica.
Resolveu o problema mas além de ferir vários princípios da modelagem, acabou ficando um pouco complexo quando olhado pelo ponto de vista do código.
O ponto técnico sobre o banco de dados escolhido é bastante importante também, muitas metodologias já descartariam esta solução (mesmo sem propor uma) por conta do acoplamento. Parabéns pelo post.