The reason it's broken is there's no lasting consequence for doing so. If the items marked as stolen could not be sold back to any vendor (fences only, as in TES) or if you were unable to wear them in public without being caught by guards or the person that sold them to you; that would be a start. I don't just mean they look through your knapsack once and give up, I mean they're constantly on the lookout for stolen goods until you have passed a persuasion check at least once. Bribing them shouldn't be as easy as it is now, but correspond to the value of the goods taken and still have to pass a persuasion check (easier than the others). If you fail the check and then commit murder of shopkeepers or Magisters, then a TOUGH party of enforcers shows up with power equivalent to the Flaming Fist or Cowled Wizards in BG2.
In addition to the above, there shouldn't be 100% of a shopkeepers items of every tier showing up in his / her pockets; it should be distributed thus:
100% of normal items available to steal.
75% of uncommon items available to steal.
50% of rare items available to steal.
25% of epic items available to steal.
A single legendary item available to steal with a 50% of it not showing up in pockets at all.
A single divine item available to steal with a 75% chance of it not showing up in pockets at all (do they show up at all in shops?)
100% of tier 1 skill books available to steal.
50% of tier 2 skill books available to steal.
25% of tier 3 skill books available to steal.
A single tier 4 skill book available to steal with a 50% chance of it not showing up in pockets at all.
A single tier 5 skill book with a 75% chance of it not showing up in pockets at all.
25% of shopkeeper's total gold available to steal.
In addition to that, there should be a level variance of the gear available to purchase in the shop, within 5 levels of your party, rather than the very latest at all times.