PERF: ExtensionBlock.fillna dispatch to underlying arrays
- [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.0.0.rst` file if fixing a bug or adding a new feature.

Per discussion: https://github.com/pandas-dev/pandas/pull/49722#issuecomment-1337974871

The discussion focused on pyarrow-backed dtypes, but it seems there is an improvement for other extension types as well:

```
       before           after         ratio
     [1c71d7db]       [86e52fee]
     <main>           <extensionblock-fillna>
-      8.08±0.2ms       6.72±0.1ms     0.83  series_methods.Fillna.time_fillna('Int64', None)
-      8.26±0.2ms      6.85±0.07ms     0.83  series_methods.Fillna.time_fillna('Float64', None)
-         128±3ms         72.3±2ms     0.56  series_methods.Fillna.time_fillna('string', None)
-      15.1±0.6ms      5.41±0.04ms     0.36  series_methods.Fillna.time_fillna('int64[pyarrow]', None)
-      60.7±0.6ms      4.82±0.02ms     0.08  series_methods.Fillna.time_fillna('string[pyarrow]', None)
```
pls dont merge until i get a change to take a look at this Thanks @lukemanley 