Once a dataset is prepared the FieldByName() method call will always return the same pointer so it is safe to store them in static references while it is prepared.
I usually only bother doing this when I am iterating through a loop or something like that.
ParamByName() works the same way except that if you do a reprepare then stored param references (pointers) will become invalid because I redo the parameters (but not the fields) when re-preparing.
Please take a look in the BlobInserts sample application to see how this has been accomplished.