BUG: fix union_indexes not supporting sort=False for Index subclasses
- [X] closes #35092
- [X] 1 tests added / 1 passed
- [X] passes `black pandas`
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

# Scope of PR
The reason for `DataFrame.append` unnecessarily sorting columns turned out to be that when merging indexes we were not passing the `sort` argument for an `Index` subclass. This PR fixes this bug.

# Details
At some point down the call stack, `DataFrame.append` calls `union_indexes` in `core.indexes.api`. In it we detect the type of our indexes: 
```python
indexes, kind = _sanitize_and_check(indexes)
```
We don't pass `sort` for `kind == 'special'` in `union_indexes`.

I had some other ideas, but what I ended up doing is to simply pass the `sort` argument to `Index.union` for `kind == 'special'`. We do have to ignore the `sort` argument for `[MultiIndex, RangeIndex, DatetimeIndex, CategoricalIndex]` to avoid breaking tests and backward compatibility, but it doesn't make sense for these ones to not be sorted when joined anyway, in my opinion.

# Performance
There are no changes to algorithms called. I still did some benchmarking to compare with my previous approach. The current solution didn't have any negative performance impact.
