Three interrelated issues here:

- [ ] `TransportBroadcastByNodeAction` derivatives are typically executed via `NodeClient` which bypasses the `TransportService` and therefore does not respect (or even know about) the `executor` parameter which would fork. This means that the coordination work, including grouping all the shards by node, happens on the calling thread. When executed from the REST layer, that's a transport worker. This is #97916, but until that's fixed we need a workaround.

- [ ] The node-level responses are deserialised and processed on the receiving transport worker too.

- [ ] Several of these actions use `SAME` for their executor, bypassing the forking that _does_ exist today.

Relates #77466 
server/src/main/java/org/elasticsearch/action/admin/indices/stats/ShardStats.java
this.commitStats = commitStats;
        this.seqNoStats = seqNoStats;
        this.retentionLeaseStats = retentionLeaseStats;
        this.dataPath = dataPath;
        this.statePath = statePath;
        this.isCustomDataPath = isCustomDataPath;
        this.isSearchIdle = isSearchIdle;
        this.searchIdleTime = searchIdleTime;
    }
    public ShardStats(
        final ShardRouting shardRouting,
        final ShardPath shardPath,
        final CommonStats commonStats,
        final CommitStats commitStats,
        final SeqNoStats seqNoStats,
        final RetentionLeaseStats retentionLeaseStats,
        boolean isSearchIdle,
        long searchIdleTime
    ) {
        this(
            shardRouting,
            commonStats,
            commitStats,
            seqNoStats,
            retentionLeaseStats,
            shardPath.getRootDataPath().toString(),
            shardPath.getRootStatePath().toString(),
            shardPath.isCustomDataPath(),
            isSearchIdle,
            searchIdleTime