5m is an odd number. 24 bit numberfield would get you 16m uniques. I can't see how they needed to steal bits to get to 23 or 22. So there must be some other factor at play here apart from 'we used 3 bytes in the gRPC model'
Perhaps the Windows exposed API assumed somewhere around 5m objects, and they care about the compatibility greatly.