A good place to start is actually here:
https://en.bitcoin.it/wiki/Mining_hardware_comparisonIt will give you a good idea about what people are doing to get what hashrates; You want to be careful to make sure that what they are doing is actually what you want to do; I'm not interested in overvolting my card or double my power consumption to get out an extra 4% of performance for example.
Try a few different miners, and a few different settings to see what works. I've found cgminer works pretty well for me on a 7950, and it also lets you tune it while it's running so you get very quick feedback on what works and what doesn't.
Switch up the fanspeed on your GPU for a start, and keep an eye on your temp. I've managed to do pretty well even without getting above about 65'C. If it's up near 85'C something isn't really right; lower your intensity or don't overclock and see if that helps.
With the AMD cards, set powertune to a negative number, (say -10) and see what that does. It stops the automatic bursting to what AMD think are the limits of the card, but that's not as useful if you're under a constant load; You'll stop bursting quite so high, but it will also stop it then throttling back in half a second when your GPU heats up. It removes variability, and gives you steadier information about what's working and what's not.
If you're mining BTC, try underclocking your memory; It will lower the thermal load on your card slightly, and (apparently) will lower power consumption with GDDR5 memory. I actually gained speed on a 5830 by lowering my clock to 275MHz rather than the default 1000MHz, which does seem kinda crazy, but hey
Good luck! Things are different with every different card and manufacturer, so some advice may or may not suit. If anyone notices I'm outright wrong about any of the above, please post so that others don't repeat my theoretic mistakes