Android OS versions 2.2 and above have built-in functionality for moving apps to SD Card. Go to
Menu -> Settings -> Applications -> Manage applications -> SD Card, then tap on any available app without a checkmark, and the button
Move to SD card should be enabled. This will move a major portion of the app to the SD Card and free up space for more apps.
If you are rooted and running a custom ROM that supports Ext2/3/4 partition types, there are special scripts available that can "fool" your phone into thinking that a portion of your SD Card is actually part of the internal memory, thus allowing you to install tons of apps without most of the disadvantages of built-in method. Be advised that this method is fairly complicated to install, and requires re-partitioning of the SD Card, flashing a hacky script, and can cause instability of the phone.