When would I need to create an index on the Semarchy back-end database tables, to improve performance (such as matching)? Upon which tables should I create those indexes?

First of all, you need to identify the precise steps/request that needs to be improved. You can export the job log (en Application Builder / Management / Execution for example) and identify the step(s) to improve.

Once the step(s) is identified, you can find the SQL order executed by Semarchy for this step (browsing execution -> specific step -> Task Definition -> SQL Statement and analyze it with a Database admin to define how to improve it : define the index you need, optimize statics computation, review a matching rule algorithm, ...

If you need an index: you can add manually directly the index on the database and validate that your performance are improved.

But WARNING: This link of components (index creation script) will not be managed by Semarchy deployment, so be careful to include it into your delivery package!