If I have several bitcoins in an offline wallet / cold storage and want to send a few bitcoins to some address, can I somehow prepare and sign the send order offline and only copy the result (say using an USB stick) to an online computer?

For example if I have a wallet with one address which has 1000 coins and want to sent 10 coins to an exchange to sell them, do I need to put my wallet.dat to a Bitcoin client which is online? (hence risking to lose it all in case the online computer I'm using is compromised)

Does it changes anything if there's change or not?

It's a theoretical question in order to better understand how bitcoin works.