Pete Rose, infamous for his collision at home plate during an All-Star game that effectively ruined Ray Fosse's career, says that it's impossible to legislate these plays out of the game, no matter how hard people try.
It seems like Pete may have taken a few too many hits to the head, because it's pretty easy for this to be fixed. It's not even slightly difficult to figure out.
If the catcher doesn't allow the baserunner a path to the plate, then the run should count. If a catcher tries to block the entire plate, that could be called interference and the runner would be granted home plate. That would eliminate collisions, because the runner would have no reason to even bother running into the catcher.
Treat home plate like any other base. You can either tag the runner and get him out, or he scores. The collision at home plate isn't even remotely necessary.
Baseball isn't a contact sport. There's no reason for people to try to make it one.