is there anyway to create dynamic vlans where each vlan can be assigned to a predefined mac address?
No I don’t believe that’s possible with RouterOS. That is a feature on higher end switches, not routers.
Any solution other than buying a cisco switch?
What you are asking for is only available for switches (tried it on cisco/3com and dell), since it is refering to “access ports” (or where you connect the hosts) while you use the router as a “trunk” port (to transport all the vlans and intervlan routing) the mikrotik way to “trunk” is similar cisco’s “router on a stick model”, i really don’t see the point of a dynamic vlan on a router since the router is used for inter-vlan routing, path determination, filtering (kind off like a layer 3 switch) not as an “access switch” for clients.