The proprietary graphics driver ATI Catalyst Linux (also known as fglrx) supports GPU frequency scaling (ATI Overdrive). You can alter the frequencies via aticonfig command, e.g:
aticonfig --od-setclocks=350,150
Run aticonfig --help or visit this page for the complete documentation.
Also, note that
there is no guarantee that the attempted clock values will succeed
even if they lay inside the theoretical range.
Another tool that works with the proprietary driver is AMDOverdriveCtrl:

The proprietary graphics driver has limited1 support for GPU frequency scaling via Coolbits options. Add
Option "CoolBits" "1"
or, for Fermi and newer cards (see this article)
Option "CoolBits" "8"
to the nVidia device section in xorg.conf (detailed description for each option in the oficial nVidia driver documentation). This practically "unlocks" the Clock Frequencies page in NVIDIA X Server Settings where you can enable overclocking/downclocking:

Alternatively, you can use nvidia-settings in terminal, e.g.
nvidia-settings --assign "[gpu:0]/GPUOverclockingState=1" --assign "[gpu:0]/GPU2DClockFreqs=350,550" --assign="[gpu:0]/GPU3DClockFreqs=500,800"
to enable frequency scaling and set core and memory frequencies for 2D & 3D profiles. Or
nvidia-settings --assign "[gpu:0]/GPUOverclockingState=0"
to revert to default frequencies. Run nvidia-settings --query all to get a list of all the attributes (like this one here).
Another tool that works with the official driver is nvclock:

1. On mobile GPUs, limited clock manipulation support is available when "1" is set in the "Coolbits" option value: clocks can be lowered relative to the default settings, but overclocking is not supported due to the thermal constraints of notebook designs.
Those who have an Intel Sandybridge/Ivybridge GPU and the right hardware should be able to manipulate clock speeds via /sys/class/drm/card0/gt_*_freq_mhz files. Details on Daniel Vetter's page.