The @memoize decorator from plone.memoize.view should work on everything that has a context and a request attribute.
I do believe a widget has both of them.
plone.memoize.view.memoize caches the result in the request annotations.
After the request is over your cached result vanishes.
Is it a viable option to store in the object annotations the results of the transform everytime you edit that field?
Another option is to do that the first time the transform is computed, like it is happening for the image scales: the first time you look for an image scale, the original image is scaled and the result is stored in the object annotations.
With something similar (some time ago), I used two fields for the behavior ( tags and 'body_text' and the rendered/transformed html was copied to the body_text field on each save.
I considered this a hack (maybe it is not ?)
The easies way is probably to write a view for a content type, but I tried to learn something new