It looks like you would want to rely on JVM args [ since you did mention that Users will use -DBrowserSpec parameter and pass it.]
I don’t think you can use this methodology in the first place, because JVM args are visible across tests in the lifespan of the JVM.
You would need to rely on TestNG parameters from your suite file to get to this level (or) choose data driven approach.
With respect to appending browser names to test methods, you would be able to do it if you build your own reporter [ by implementing Ireporter interface] (or)
Assuming each of your test classes have just 1 @Test annotated test method, you could try implementing ITest interface at each of your test class level and then have the getTestName() method return back whatever you need as the method name.
Thanks and Regards
"All the desirable things in life are either illegal, expensive, fattening or in love with someone else!"