This seems like a reasonable idea, although the hit to readability and simplicity is such that you'd only want to do it in places where it would make a real memory difference.
Why not try it and see?
(By the way, it'd be 48 bits that you'd save replacing a 64 bit pointer with a 16 bit index).