It's a problem without a solution. It's the Gordian knot.
You can't get rid of block/charge completely, because then the offensive player can just shove his way into the lane for an uncontested shot.
Personally, I don't think the rule is the problem. The problem is the enforcement of the rule, and it can't be fixed because the collisions occur in real time and we can't resort to a replay for every time there's contact. The refs have to call what they see, and sometimes they "see it wrong." You would, too, if you were a ref because you would lack the benefit of multiple replays from different angles that the home TV viewer gets to see.
Those who are arguing that "taking a charge" isn't a "basketball play" need to have a talk with Coach K. I guarantee you he sees it differently. Our guys not only take charges frequently, they practice taking charges. They are coached to take charges. Taking a charge is a turnover PLUS a foul on a opposing player. It's not only a basketball play, it's a huge basketball play.
"We are not provided with wisdom, we must discover it for ourselves, after a journey through the wilderness which no one else can take for us, an effort which no one can spare us, for our wisdom is the point of view from which we come at last to regard the world." --M. Proust