И зачем тут дин диспатч вообще нужен. Засовываешь все типы в энам, делаешь трейт Collider, в имплементации требуешь Into<MyEnum> от self с other, форвардишь методы через матч.
Можно, как раз со стороны и нельзя давать предоставление поиска коллизий, так как требуется все пары перебрать, что невозможно и нарушает orphan rules вроде даже