BUG/PERF: merge_asof with multiple "by" keys
- [x] closes #43541
- [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.

```
> asv continuous -f 1.1 upstream/main merge-as-of-multi-by -b join_merge.MergeAsof
```

```
.       before           after         ratio
     [59d4e841]       [bfe776d7]
     <main>           <merge-as-of-multi-by>
-      1.66±0.03s         602±50ms     0.36  join_merge.MergeAsof.time_multiby('nearest', None)
-      1.56±0.03s         560±40ms     0.36  join_merge.MergeAsof.time_multiby('nearest', 5)
-      1.48±0.03s         449±50ms     0.30  join_merge.MergeAsof.time_multiby('forward', None)
-      1.60±0.07s         472±30ms     0.29  join_merge.MergeAsof.time_multiby('forward', 5)
-      1.25±0.03s         314±10ms     0.25  join_merge.MergeAsof.time_multiby('backward', None)
-       1.35±0.1s         295±10ms     0.22  join_merge.MergeAsof.time_multiby('backward', 5)
```
Thanks @lukemanley 