Is there a more space-efficient way to prove that a transaction is contained within a block?
Other than shortening the hash used, there is no way of making the proof take less space.

On a side note, the hash can be made shorter by just using the first n bits.  The checksum of a bitcoin address (first 4 bytes of sha256(body))is made in this way.  I don't know why ripe160 is used instead of a truncated form of sha256 for the main body of the address.