ENH/PERF: add ExtensionArray.duplicated
- [x] closes #27264
- [x] closes #48424
- [x] closes #48788
- [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/v2.2.0.rst` file if fixing a bug or adding a new feature.

[updated]

`asv continuous -f 1.1 upstream/main arrow-temporal-duplicated -b algorithms.Duplicated`

```
       before           after         ratio
-         101±2ms         51.6±3ms     0.51  algorithms.Duplicated.time_duplicated(False, False, 'string[pyarrow]')
-        98.5±3ms         47.3±4ms     0.48  algorithms.Duplicated.time_duplicated(False, 'first', 'string[pyarrow]')
-        96.0±4ms         45.5±4ms     0.47  algorithms.Duplicated.time_duplicated(False, 'last', 'string[pyarrow]')
-      1.57±0.03s       13.6±0.3ms     0.01  algorithms.Duplicated.time_duplicated(False, False, 'timestamp[ms][pyarrow]')
-      1.54±0.02s       13.1±0.7ms     0.01  algorithms.Duplicated.time_duplicated(False, 'first', 'timestamp[ms][pyarrow]')
-         1.55±0s       12.8±0.7ms     0.01  algorithms.Duplicated.time_duplicated(False, 'last', 'timestamp[ms][pyarrow]')

```
Thanks @lukemanley  This patch may have induced a performance regression. If it was a necessary behavior change, this may have been expected and everything is okay.

Please check the links below. If any ASVs are parameterized, the combinations of parameters that a regression has been detected for appear as subbullets.

 - [period.Algorithms.time_drop_duplicates](https://asv-runner.github.io/asv-collection/pandas/#period.Algorithms.time_drop_duplicates)
   - [typ='index'](https://asv-runner.github.io/asv-collection/pandas/#period.Algorithms.time_drop_duplicates?p-typ=%27index%27)

Subsequent benchmarks may have skipped some commits. The link below lists the commits that are between the two benchmark runs where the regression was identified.

https://github.com/pandas-dev/pandas/compare/6e6a6831aaa2d1606aa897b34f106e655180034b...3bf0f647ca42bf21de76f9e6027de38cb5589147
