I think an external function is the best option and also will work in many other situations.
One way would be to have one function for the whole row of a feed. So code would send productid and an IList (or Dictionary) of KeyValue Pairs. The subplugin can then modify this collection and return it.
This would be better as one field may rely on calculations of data in other fields in the row.
Yes a badly coded subplugin could slow performance, but that is the subplugin authors responsibility. Also, generating a feed is a background task so if it runs a few seconds slower it does not really matter.