Few things will beat strong marketing. Alas for the NHL though, it probably matters little how much they market, they are always going to have the "have not" cities, short of contraction.

MLB doesn't have a salary floor, the NFL does. MLB also lacks a salary cap.

Essentially, an owner of a low-level MLB team knows that he'll never be able to compete against the big boys on a consistent basis. Every once in a great while, there's a big one-year spike (like the Colorado Rockies or Houston Astros), but outside of that there's just no way to stay competitive. So the owners of teams like Pittsburgh and Kansas City simply take the revenue sharing check and put it into their own pocket. They're not forced to put it back into the team, and even if they were, there's no reason to...they'll simply never compete.

The only small-market team in MLB that's had an actual run of being competitive in the last 20 years is the Cleveland Indians, and that's because they had an almost impossible run of good fortune in drafting, trading, and developing. But a team like that is still always balancing on a razor's edge; one typical trade of their star for a group of prospects that doesn't work out can completely devastate the team for years to come.