Take a look at the specification for transaction messages, particularly the sample transaction: https://en.bitcoin.it/wiki/Protocol_specification#tx
The best way to minimize transaction size is to minimize the number of inputs. Avoid accumulating "dust" balances of very tiny amounts. This is why mining pools have minimum payouts.
Vanity addresses are still the full 20 bytes. Even if you use a firstbits address, you have to look up the full address before using it.
[Moved the answer from the comment below to here:
You don't get a transaction size saving from using firstbits, because it is not legal in the protocol and you will have to use the full address anyway.]
Are you saying that Firstbits addresses are legal in the Protocol? I'll read the spec shortly – goodguys_activate – 2012-12-06T23:54:05.490
I think no. As I understand it firstbits provides an API that gives back the full address when passed a short address. – Highly Irregular – 2012-12-07T01:03:38.053
2I'm saying that you don't get a transaction size saving from using firstbits, because it is not legal in the protocol and you will have to use the full address anyway. – scott.squires – 2012-12-07T17:25:18.050