Higher batch size is usually better. The default batch size in 5.0 and 2.4 will be 1000 which is fairly reasonable.
Another thing you can do is set the refresh_interval to -1 on the destination index. That usually makes indexing much more efficient. Just do this before the reindex. You can set refresh=true in the reindex request and it'll trigger a refresh when it is done. Don't forget to reset refresh_interval back to something else after you finish with the reindex.
You can also slice the reindex into multiple concurrent requests with something like a range query. Like, issue 10 concurrent reindexes each with non-overlapping range queries.