I believe this is a useful idea, but I would define it on the level below the base58 encoding.
So, an address currently is a base58-transformed sequence of bytes:
- A version byte (0)
- The pubkey hash (160 bit, 20 bytes)
- A 32-bit (4 byte) checksum
It's not that hard to define a similar format for shortened addresses, but I would suggest not requiring lookup code to parse full blocks when looking for an address - they could become quite big in the future. Rather, what about this:
A base58-transformation of:
- A version byte (1)
- A BER-encoded block number
- A BER-encoded tx number
- A BER-encoded txout number
- A 8-bit (1 byte) checksum
(BER encoding: in every byte, bits 0-6 contain data, bit 7 signifies if another data byte follows, like UTF-8 for unicode)
Up to block number 2113663, and as long as less than 128 transactions and less than 128 outputs per txout are used, this results in 7 bytes, or 10 base58-encoded characters. An alternative (if it's meant for typing over, instead of automated handling), would be to use base36 (case-insensitive alphanumeric) resulting in 11 characters.