PERF: Reindexing ffill DatetimeIndexes with different timezones
- [x] I have checked that this issue has not already been reported.

- [x] I have confirmed this bug exists on the latest version of pandas.

- [ ] (optional) I have confirmed this bug exists on the master branch of pandas.

---

**Note**: Please read [this guide](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports) detailing how to provide the necessary information for us to reproduce your bug.

#### Code Sample, a copy-pastable example

```python
import pandas as pd
idx = pd.date_range("2020/01/01", freq="s", periods=500000, tz="America/New_York")
idx_naive = pd.date_range("2020/01/01", freq="s", periods=500000, tz=None)
idx_same_tz = pd.date_range("2020/01/01", freq="s", periods=400000, tz="America/New_York")
idx_diff_tz = pd.date_range("2020/01/01", freq="s", periods=400000, tz="Asia/Tokyo")
print(idx.dtype, idx_naive.dtype, idx_same_tz.dtype, idx_diff_tz.dtype)

# fast:
In [11]: %%time
    ...: idx.get_indexer(idx_same_tz)
    ...:
    ...:
CPU times: user 15.6 ms, sys: 0 ns, total: 15.6 ms
Wall time: 20.3 ms
Out[11]: array([     0,      1,      2, ..., 399997, 399998, 399999])

# ~400x slower:
In [12]: %%time
    ...: idx_naive.get_indexer(idx_diff_tz)
    ...:
    ...:
CPU times: user 5.38 s, sys: 188 ms, total: 5.56 s
Wall time: 5.57 s
Out[12]: array([-1, -1, -1, ..., -1, -1, -1])

In [13]: %%time
    ...: idx.get_indexer(idx_diff_tz)
    ...:
    ...:
CPU times: user 7.94 s, sys: 188 ms, total: 8.12 s
Wall time: 8.12 s
Out[13]: array([    -1,     -1,     -1, ..., 349597, 349598, 349599])
```

#### Problem description

Re-indexing two `DatetimeIndex` with different time-zones, e.g. `pd.Series(index=idx, dtype="float64").reindex(idx_diff_tz, method="ffill")`, is significantly slower than when the two indexes have the same timezone. This is due to a cast of both inputs to `"object":
```python
In [22]: %load_ext line_profiler

In [23]: %lprun -f pd.core.indexing.Index.get_indexer idx.get_indexer(idx_diff_tz)

Total time: 10.3548 s
File: $CONDA_PREFIX/lib/python3.8/site-packages/pandas/core/indexes/base.py
Function: get_indexer at line 2706

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
  2706                                               @Appender(_index_shared_docs["get_indexer"] % _index_doc_kwargs)
  2707                                               def get_indexer(self, target, method=None, limit=None, tolerance=None):
# .. snipped for brevity
  2725         2         54.0     27.0      0.0          if not is_dtype_equal(self.dtype, target.dtype):
  2726         1    4924773.0 4924773.0     47.6              this = self.astype(object)
  2727         1    3741150.0 3741150.0     36.1              target = target.astype(object)

```

Relatively minor: its reasonable to expect users to ensure their data is in the same timezone, and its easy to workaround -- `idx.tz_convert(idx_diff_tz.tz)` would suffice. Still, it could be a bit of a gotcha if a user is using `.reindex()` to convert data (e.g. from across different API boundaries) to the same timezone, so thought it was worth filing an issue.

Potential fix could be:
* checking if `this` and `target` are both `datetime64[??]` in the above snippet and casting `this = this.astype(target.dtype)`
* doing something similar in `Index._possibly_promote()`


#### Expected Output

Similar performance between reindexing with same and different timezones

#### Output of ``pd.show_versions()``

Confirmed performance discrepancy from pandas 0.17 through 1.0.3:
<details>

INSTALLED VERSIONS
------------------
commit           : None
python           : 3.8.2.final.0
python-bits      : 64
OS               : Linux
OS-release       : 4.4.0-18362-Microsoft
machine          : x86_64
processor        : x86_64
byteorder        : little
LC_ALL           : None
LANG             : C.UTF-8
LOCALE           : en_US.UTF-8

pandas           : 1.0.3
numpy            : 1.18.1
pytz             : 2020.1
dateutil         : 2.8.1
pip              : 20.0.2
setuptools       : 46.1.3.post20200330
Cython           : None
pytest           : None
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : None
jinja2           : None
IPython          : 7.13.0
pandas_datareader: None
bs4              : None
bottleneck       : None
fastparquet      : None
gcsfs            : None
lxml.etree       : None
matplotlib       : None
numexpr          : None
odfpy            : None
openpyxl         : None
pandas_gbq       : None
pyarrow          : None
pytables         : None
pytest           : None
pyxlsb           : None
s3fs             : None
scipy            : None
sqlalchemy       : None
tables           : None
tabulate         : None
xarray           : None
xlrd             : None
xlwt             : None
xlsxwriter       : None
numba            : None

</details>
