BUG: MultiIndex.union dropping duplicates from result
- [x] xref #38745
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

This more or less sits on top of #36299. The current base-_union implementation works only for sorted indexes correctly if indexes containing duplicates. Hence I've only added tests for sorted indexes, 
This pull request is stale because it has been open for thirty days with no activity. Please update or respond to this comment if you're still interested in working on this. Thx, code itself is good, but this depends on #40862, after this is merged we can remove the sort_values in the tests. Will run asvs afterwards to check for performance implications wait for #40862 right? Yes  Unfortunately this looks like a pretty high performance penalty

```
       before           after         ratio
     [84d9c5ed]       [f77120cc]
     <multiindex_union~1^2>       <multiindex_union>
+        77.4±2ms          159±4ms     2.05  multiindex_object.SetOperations.time_operation('non_monotonic', 'int', 'union')
+      33.4±0.5ms         57.9±1ms     1.73  multiindex_object.GetLoc.time_large_get_loc_warm
+         102±1ms          152±2ms     1.49  multiindex_object.SetOperations.time_operation('non_monotonic', 'string', 'union')
+      99.4±0.9ms          144±1ms     1.45  multiindex_object.SetOperations.time_operation('monotonic', 'string', 'union')
+         520±4ms         640±20ms     1.23  multiindex_object.SetOperations.time_operation('non_monotonic', 'datetime', 'union')

``` where is the perf diff coming from now?  The Index union for duplicates is not that fast ok this is fine if this slowdown only occurs when we have duplicates (which i think is the case) I'll check the benchmarks Unfortunately the slowdown is for also for non monotonic indexes. We could do it with only dispatching to Index.union in case of duplicates or nans, but this is makes it more complicated unfortunately.

```
       before           after         ratio
     [0158382a]       [692272cb]
                      <multiindex_union>
+         685±5ms         887±20ms     1.30  multiindex_object.SetOperations.time_operation('non_monotonic', 'datetime', 'intersection')
``` @phofl can you merge master Done thanks @phofl 