Chris Down already showed how you can get an else for regexps by using an explicit 'if' statement in a block. You can get also get the same effect in some other ways, although his solution is probably better.
One is to write a third regex that will only match text not matched by the others, in your case, this would look something like this:
awk '/^R1/ { print "=>" $0}
/^R2/ { print "*" $0}
/^[^R]/ || /^R[^12]/ { print $0 } '
Note, this uses anchored regexps - the ^ at the beginning of the regexps will only match at the beginning of a line - your original patterns did not do this, which slows down the matching slightly as it will check all characters on a line rather than skipping until the next line. The third ("else") case will match a line that begins with some character that is not 'R' ([^R]) or that begins with an 'R' followed by a character that is not a '1' or '2' (R[^12]). The two different meanings of ^ are somewhat confusing, but that mistake was made a long time ago and won't be changed any time soon.
To use complementary regexps, they really need to be anchored, as otherwise the [^R] would match e.g. the 1 following it. For very simple regexps like you have, this approach can be useful, but as the regexps get more complex, this approach will become unmanageable. Instead, you can use state variables for each line, like this:
awk '{ handled = 0 }
/^R1/ { print "=>" $0; handled = 1}
/^R2/ { print "*" $0; handled = 1}
{ if (!handled) print $0 } '
This sets handled to zero for each new line, then to 1 if it matches either of the two regexps, and finally, if it is still zero, executes the print $0.