CROSS JOIN solution for records "missing" from a link table
I am pretty sure that this is the right approach to solve this problem, but depending on the RDBMS, it is not necessary the use of any index to access each row.
Oracle, for instance, will probably operate with Hash Joins in this case, because of the high  cardinality of the query (at the end of this task all rows of this 3 tables must be accessed) and if you have an index on the link table, it will use an Index Fast Full Scan.
I don't know if other RDBMS have the power of Hash Joins operations, which uses more memory instead of IOs.

Another syntax that could be used in this problem is the NOT EXISTS operator. Choose which syntax you think will translate more clearly the meaning of the query. In Oracle it will forces to perform an Hash Join Anti operation in the last table.