The issue is the type is user-facing: it’s misleading to the user to say it may be of type Missing if it’s only temporarily missing while setup.
Or another user case that comes up a lot is when your array is dynamically resized (I have a CachedArray type floating around that does this with lazy arrays). The natural initial size is 0 x 0: this is not to indicate it’s missing, just to indicate it’s currently empty.
Also, while Union{T,Missing} might be efficient in many settings, this is a compiler optimization trick that as a user we do not and can not appreciate the full impliciations of.