I think the salary cap is a bad idea. I vaguely follow the NBA and ignore the NFL, but it always strikes me as silly and tedious that the teams now must make so many decisions based on their salary cap. It's especially silly that teams end up devising elaborate mechanisms for creating contracts specifically tailored to the salary cap.
Instead of limiting salaries, my solution is increased revenue sharing. As the system stands now, teams keep the money they make from their local TV and radio broadcasts. The teams with the biggest broadcast deals (Yankees, Mets, Red Sox, Cubbies, Bravos, Dodgers) keep all that money, while all teams share the money MLB makes from national broadcasts. I think that the local team should get half the money from their broadcast deals, and half should go to MLB and then redistributed to all teams. With this base, teams would be guaranteed a minimum and, as many teams have recently shown, it's very possible to win without breaking the bank on salaries.
Teams should keep the money the make on ticket sales and concessions. I thought that this chart:
is fascinating. (It's a couple of years old, so the A's and Angels are probably higher today.) I think that teams should be rewarded for spending money to promote themselves. I've got no love for George Steinbrenner, but he has undoubtedly spent lots of money promoting the Yankees and he deserves to be rewarded. If teams put a crappy product out on the field, fans won't show up (see: Brewers, Tigers) and the owners wouldn't make the money they'd have made if they'd fielded strong teams.