Your setup looks reasonable to me. The tags you propose sound exactly right.
You could simplify by implementing minor releases in the main line. You can use feature branches for developing large features that will end up in a major release to keep them out of the mainline until they are done.
For patches you create a maintenance branch originating in the tag of the version you want to patch. After fixing in the maintenance branch you can merge back to the main line.
My advice would be to try and keep it as simple as possible. It is cool that you have a lot more freedom in 3.0.0 but it is easy to shoot yourself in the foot :-)