Just as an aside, this is what Coq does (the naming, at least - it’s mandatory, as a matter of fact). I’m unsure of how Coq handles imports of such.
One nasty facet is that Coq allows declaring two such impls in the same place (so long as the names differ) - the last declared is silently used.
As an example, if I implemented Add<Foo> for Foo twice, and then wrote a function fn frob<F: Add<Foo>>(f: F) and invoked it with a Foo, it would silently use the second impl, without disambiguation. (I am, in fact, unsure disambiguation is possible without creating a module boundary and importing only one - I ran afoul of this in a project.)