I suspect the 'expensive' part is gems and metals. I was trying to find specific baits in the code (with not much luck) but I did discover that they are listed as baits, and they are available to use in the bait list.
The expensive bait is simply the generic message if the bait isn't among the ones it has a specific message for. In the fishing.fishing_interactions file there are specific messages for frogs, small fish, medium fish, fresh fruit, fresh flowers, and organic; if the fish requires anything else, it will result in the "expensive" message. I believe currently the only different thing a fish might require is large fish as a bait, but I could be wrong, and future content could bring fishes that ask for inorganic bait.
Baits work as hidden buffs. If you have extracted the tuning files with the tuning name somewhere in the file name, do a windows search for "file:*buff*bait" without quotes and you will find every bait buff.
For reference, you have small, medium, and large fish; frogs; fresh flowers and fresh fruit; metals, crystals, and elements; and rotten fruits. You also have two bait groups, trash and organic. The groups are set manually, though; an object that is part of one bait group will have the group explicitly set.
As for what counts as each kind of bait, that info is hidden away in the COBJ files as numerical references to tags. I'm still using S4PE 0.2a, so I'm not sure if newer versions identify that element, but if you look at the element named Unknown 5 in a COBJ file, it's a list of numerical references to tags in the tag list (instance 0xd89cb9186b79acb7, type 0x03b33dd, gets extracted to the tun folder). The kind of bait is one of the tags (or, rather, multiple; for example, seems like any kind of fish, fruit, flower, or frog also count as an organic bait)
I don't offer a list this time because I've yet to make something to spit a nice list of which object has which tag, so I would have to do a manual search and... well, with over 10k objects, that is a more than daunting proposition. More so because I would have to keep cross-referencing with the numerical codes of the buff list.