looking at the code it seems I could add a field fEnableAsyncPrefetch to TTree and a setter method SetCacheAsyncPrefetching(Bool_t), which could be called by the user before they start reading tree entries.
Then, whenever the TTree creates a new TTreeCache, the TTree will communicate to the cache the TTree:: fEnableAsyncPrefetch variable (through TTreeCache's constructor or TFileCacheRead->SetEnablePrefetching().
This will make it easy to enable async prefetching per TTree and per TFile (maybe TFile will need a similar member variable).
A use case for this feature would be when a program reads multiple ROOT files and async prefetching would be advantageous for some the files only.