If your priority is avoiding the proliferation of the link tables, you can use inheritance (aka. category, subclassing, generalization hierarchy):

No matter how many child entities Item
has, you always need only one link table (PersonItem
).
Unfortunately, inheritance is typically not directly supported by today's DBMSes so you'd have to represent it manually using either "all classes in one table" or "class per table" of these 3 strategies ("concrete class per table" would still proliferate link tables). This will increase the complexity in some cases, so if your priority is keeping queries simple, you are probably better off sticking with the current design (though this depends on the kinds of queries you intend to run - some may actually be simpler with inheritance).
BTW, the model above will not let different Hobby
and Thing
share the same Id
. I'm guessing this is not important to you, but in case it is, this is an argument for the model without inheritance (or you'd need to include the type in the Item
's PK).