PrefetchingTermLookup interface, with its simplest implementation BufferingTermLookup combine TermLookup and TermBuffer interfaces.
Apparently, the "prefetching"/buffering is done for LabelDescriptionLookup services, so that when the label/description of particular item/property is to be shown multiple times (e.g. the item appears several times on a page), the label/description is only fetch ones from the storage, and then kept in a in-memory buffer until the end of request.
This makes sense, but the way it is done is a bit cumbersome. LabelDescriptionLookup itself does not hold any buffer. It gets label/description of the entity from TermLookup. As all LabelDescriptionLookup instances used get PrefetchingTermLookup (ie. lookup that is also a TermBuffer) in their constructor, label/description lookups "magically" use buffered term-lookups.
In the course of T196882 LabelDescriptionLookup implementation(s) are being added that not rely on TermIndex/wb_terms table. In the case of "prefetching" those could be also doing per-process buffering, removing the need of using wb_terms for fallback in "prefetching".
Idea to try out under umbrella of this task: make LabelDescriptionLookup buffer itself, and explicitly. If possible remove PrefetchingTermLookup/TermBuffer, unless they are used by other services too (not-that-extensive check by @WMDE-leszek suggests they are not).