For future reference, here is the section in my documentation that describes how the water height can be queried at any location.
For the shader, this calculation is done on the GPU, and for buoyancy it is calculated on the CPU. As you have noticed, when doing this on CPU you need to be careful, in order to not run into performance problems. Generally speaking, calculating this on every tick for many points (hundreds or thousands) is not a good idea. But I think in most situations, you will not have that many floating object on screen very close to the camera. Far away objects can (and should) be switched over to SinglePoints mode, and objects off screen should have the buoyancy disabled completely for performance reasons.
In general you should try to minimize the number of points at which you need to query the water height (5 or 10 points should be enough for most objects to give realistic looking buoyancy motion). Also, think carefully if you really need to query the water height on each tick. Buoyancy motion is quite slow, and you should be able to get away in most cases with querying the water height a few times per second (and interpolate/extrapolate the rest). These tricks are also used in the buoyancy component of Physical Wate Surface.
You should also be aware that the buoyancy performance that you see in the editor is worse than in the standalone game, because of all the blueprint debugging stuff that is active when playing in editor.
Also, and this is the most important point: The buoyancy blueprint can (and really really should) be nativized automatically to to C++ code (see documentation here). I’ve verified that this works with Physical Water Surface, and it brings a huge improvement in buoyancy performance.
I hope this information is helpful. As you have already recognized, the success of your endeavor will depend on the question if you can limit the number of water height calculation that are queried from Physical Water Surface each tick. Does the third party buoyancy plugin really need to query the water height on each tick? I would start by querying it every second tick, and to extrapolate the value when it is not queried.