PERF: MultiIndex.union

- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/v1.6.0.rst` file if fixing a bug or adding a new feature.


cc @phofl - following your improvements to MultiIndex.difference, it looks like we can replace fast_unique_multiple.

```
     [57630237]       [7d8e3cf8]
     <main>           <multiindex-union>
-      80.0±0.9ms       61.7±0.6ms     0.77  multiindex_object.SetOperations.time_operation('non_monotonic', 'string', 'union')
-        81.7±1ms         61.1±1ms     0.75  multiindex_object.SetOperations.time_operation('monotonic', 'string', 'union')
-      55.6±0.4ms       38.3±0.3ms     0.69  multiindex_object.SetOperations.time_operation('non_monotonic', 'ea_int', 'union')
-        53.8±1ms       36.6±0.8ms     0.68  multiindex_object.SetOperations.time_operation('monotonic', 'ea_int', 'union')
-      34.1±0.4ms       14.2±0.6ms     0.42  multiindex_object.SetOperations.time_operation('non_monotonic', 'int', 'union')
-        33.9±2ms       13.8±0.6ms     0.41  multiindex_object.SetOperations.time_operation('monotonic', 'int', 'union')
-        75.8±4ms       14.9±0.4ms     0.20  multiindex_object.SetOperations.time_operation('non_monotonic', 'datetime', 'union')
-        75.4±3ms       14.3±0.6ms     0.19  multiindex_object.SetOperations.time_operation('monotonic', 'datetime', 'union')
- ```
thx @lukemanley 