What I described is how you configure the VLAN table in most switch-GUIs, including MikroTik SwOS, you have the VLAN as Row ID and you turn on the checkboxes/flags which are the ports for the indvidual rows:
Same with Aruba:
Or Draytek:
Or TP-Link (look at the table at the bottom of the screenshot)
That is because the normal workflow is that you have a new network to add, let's say "Library", you create a new VLAN with a new VLAN ID, let's say 25, you add that VLAN ID
as a new row to the VLAN table, then decide which ports the VLAN will be made available to, tagged or untagged (you check the checkboxes, in the WinBox/RouterOS you fill the tagged and untagged attribute).
Later you decide that "Library" should no longer be available on port ether10, then you just need to uncheck that checkbox on the VLAN ID 25, or in WinBox remove ether10 from tagged attribute of that row.
You organize and manage your networks (the VLANs) and work on them as entity, not some individual port of some device.
I will add one more thing that was invaluable for me. If I had many switches connected to each other and on each such port I gave a range of 1-2000 vlans, even though in reality I was using several hundred, then when a new vlan arrived (of course in the range of 1-2000) I did not have to do anything on those switches, it simply worked. And now I have to either create 2000 entries for each vlan by default (it looks very sloppy), or when a new vlan arrives I have to suddenly configure it on all the switches along the way
You said that yourself, there can be thousands of VLANs. When you manage data as table you don't want your table to have thousands of columns. It's the number of rows that should grow or shrink and in order of magnitudes larger than the number of columns. When a new VLAN appears, you add a new row and fill the attributes of that row (tagged/untagged). Just like when you add a new department or customer to a database, you add a new row, fill attributes (name, location, etc...) and never add a new column.