Status update:
I've analyzed the FARC files in PSMD, and a lot of them have a corresponding list of files in them (usually called *_database.bin or *.lst). Unfortunately, there's no obvious relation between the filenames and the entries in the FARC, because the filename database is sorted alphabetically, and the FARC entries are sorted by what may be a hash. The newest version of FARC replaces each entry's filename pointer with what's probably a hash of the filename. I think it's a hash because the game scripts refer to backgrounds in image_2d.bin by filename (like WALLPAPER_SUB_GOLD01), and there's no obvious dictionary. I've tried various hashing algorithms like the ones on Nitrxgen's website, in addition to the C++ hash function in <functional>, but no matches. It's possible the hash is calculated with a Unicode string, which would yield different results than with an ANSI string, so my tests on Nitrxgen's page would mean nothing. The only algorithm I've tried with a Unicode string is C++'s hash function in <functional>.
Also, thanks to @Andibad for making his FARC Unpacker open-source, which helped me get this far.