I have a similar solution and implemented a few:
I would use:
Trackers to store and record the data.
Wiki page (template and semantic alias) + plugin List and customSearch to display and search
MySQL search engine is good, elasticSearch engine would give more flexibility (like better auto-complete, facets, etc)
Relation between items is doable of course, but (in my point of view) this is already more than just a general answer and your use case should be carefully reviewed.
If this help; The relation fields can do such job but it needs a "value" to match or unmatch.
You can use a field value or "create" a value using the mathematical field.
For exemple, if you have a tracker Orders with several fields (id, date, name, product, price, etc...)
You create a field in tracker that will create a value like : id | date | product | name
Then you use this field with many searchable values to create searches or relations.
Note that I had some issue lately with this for the dates.
Somehow "dashes" are considered like spaces and searching for 2021-04-04 will return anything that contains 2021-x-x (you have to use exact or replace the dash)
Hope this helps