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/support/broadcast/node/TransportBroadcastByNodeAction.java
}
    private void executeAsCoordinatingNode(
        Task task,
        Request request,
        Map<String, List<ShardRouting>> shardsByNodeId,
        int unavailableShardCount,
        int availableShardCount,
        DiscoveryNodes nodes,
        ResponseFactory<Response, ShardOperationResult> responseFactory,
        ActionListener<Response> listener
    ) {
        new CancellableFanOut<Map.Entry<String, List<ShardRouting>>, NodeResponse, Response>() {
            final ArrayList<ShardOperationResult> shardResponses = new ArrayList<>(availableShardCount);
            final ArrayList<DefaultShardOperationFailedException> exceptions = new ArrayList<>(0);
            final AtomicInteger totalShards = new AtomicInteger(unavailableShardCount);
            final AtomicInteger successfulShards = new AtomicInteger(0);
            final TransportRequestOptions transportRequestOptions = TransportRequestOptions.timeout(request.timeout());
            @Override
            protected void sendItemRequest(Map.Entry<String, List<ShardRouting>> entry, ActionListener<NodeResponse> listener) {
                final var node = nodes.get(entry.getKey());
                final var shards = entry.getValue();
                final var nodeRequest = new NodeRequest(request, shards, node.getId());
                if (task != null) {
                    nodeRequest.setParentTask(clusterService.localNode().getId(), task.getId());
                }
                transportService.sendRequest(
                    node,
                    transportNodeBroadcastAction,
                    nodeRequest,
                    transportRequestOptions,