How to tell if a type is an efficient small type union?

You mean how whether it should be, or to introspect what happens for a particular T in practice?

I think the current situation is that for the union of two (or more?) bits types, it is guaranteed to be represented efficiently, but this is an implementation detail and may be expanded later on.