I think this is likely the most efficient solution as a page (menu item) has data store in CMS_Tree and CMS_Document table, and any other page types will involve a third table for that page type. And using custom table doesn't give you the permission module that's out of box for pages.