There is an undocumented method lookupOrAddDerived, which behaves like lookupOne but creates a matching record if one isn’t found. You could use it to trigger the creation of the second record – you could add a column to the Entities table with a formula like this:
if type == "parts":
Parts.lookupOrAddDerived(entity=$id)
elif type == "assembly":
Assemblies.lookupOrAddDerived(entity=$id)
...
In terms of usability of the end result, I don’t know if that would be better than one (bloated) table, but maybe.
In terms of using lookupOrAddDerived, the reason it’s not documented is that it’s buggy if used beyond simple one-way cases like this, and its limitations might be fundamental. But I expect it would work for this example.