How to handle a CSV with 65,000+ rows and make it searchable?

This would be best handled as a custom taxonomy.

Why? Because taxonomy is already optimized for finding related content. Using a custom taxonomy means you automatically get post edit metaboxes, archive templates, admin screen searches, and more.

Creating posts for each item and using a post_meta search would be orders of magnitude slower. I’m running into this issue myself with 100k posts related to 14k authors via an ACF post_meta field. Sloooow.

Structure:

Each ID code would be the term name. Each description would be the term description — term description is a standard field in WordPress but it’s not exposed by default. You’d want to search elsewhere for the code to expose the term description in various admin screens and frontend pages.

Relationship:

Each post gets one or more of these terms assigned. How you assign them is up to you.

Import:

WPAllImport can handle taxonomy term imports. One advantage of WPAI is that you can re-run an import with a new source csv and update your previous import. To do that, each row would need a unique ID — you could use the term name if that’s unique and unchanging from one import to the next update, or create a third row with a unique id used just for importing.