How does one make an unambiguous context-free grammar for arithmetic expressions?
Indeed you made a step to resolve ambiguity, but your solution does not give a fully unmabiguous grammar yet. The string $x+x+x$ can be parsed in two different ways, like $x + [x+x]$ or like $[x+x]+x$, where the brackets indicate parses. As far as I see your solution resolves semantical ambiguities (it fixes the relative order of + and x) but not the syntactical ambiguity. So obtaining an umambiguous grammar is not the only goal for an example like this: we want to respect meaning (here operator precedence). (Perhaps there is more official terminology for that)

Your example is a familiar one, and is used in wikipedia/Syntax diagram:

&lt;expression&gt; ::= &lt;term&gt; | &lt;expression&gt; "+" &lt;term&gt;
&lt;term&gt;       ::= &lt;factor&gt; | &lt;term&gt; "*" &lt;factor&gt;
&lt;factor&gt;     ::= &lt;constant&gt; | &lt;variable&gt; | "(" &lt;expression&gt; ")"


Probably you will know that not every grammar has an unambiguous equivalent, so no general approach is possible.