Yeah, the Gaussian trick is like programming in a high-level language: using existing abstractions lets you write clean and concise code, at the price of some efficiency versus the optimal engineered-from-scratch solution.
I'm not sure I agree, I think the really high-level option is to use a library and not roll your own.
For example:
https://www.gnu.org/software/gsl/manual/html_node/Spherical-...
So your solution ends up pretty much using the same math (while probably calling cos a few more times) and throwing away at least one random number and possibly half of them (depending on the implementation of randn).
http://en.wikipedia.org/wiki/Box–Muller_transform