The speed thing is easy: internal storage is faster than sd (even a class 6 card, which is the fastest the Desire can handle), so moving all of your internal data to sd is slower than just moving apks or apk+dalvik.
Most custom ROMs for the Desire come with an a2sd script in them. For those that don't (such as cyanogenmod) you can add your own - I used to add the DarkTremor script back when I used CM7, for example.
Some ROMs' scripts just move whatever they are designed to move (either apks or apk+dalvik) without any action on the user's part. DarkTremor, and some scripts derived from it, can be configured using command line instructions from a terminal emulator ("a2sd <command>").
What most of them do is create directories on the sd-ext (e.g. app or dalvik-cache directories), move the corresponding elements of the apps from internal to the sd-ext, and then replace the directories in internal storage with links to the directories on sd-ext. To the phone it looks as if everything is still on the phone, but in reality a lot of stuff is on the card - moving an app "to the phone" via the phone menu actually moves it to sd-ext. The upshot is that as you install apps, most of the app is on the card, and so your internal space goes down much more slowly.