If you want to treat each command line argument as a separate pattern (i.e. you want a “match” if a line starts with any of command line arguments), then you might construct your whole extended regular expression like this:
^(arg1|arg2|arg3|...) [0-9]+
You can use set IFS to | and use $* to automatically expand your positional parameters into that form like this:
(IFS=\|; echo "^($*) [0-9]+")
The parentheses form a subshell so that the changed IFS is limited to the commands in the parentheses (you may not want that setting to affect later parts of the script.
You will need to be careful when using command line arguments that contain extended regular expression metacharacters. For example, if you wanted to search for the literal string foo(bar), you would need to pass something like foo\(bar\) as the argument (an ERE that matches the literal string), which you might write as 'foo\(bar\)' on an actual command line.
Finally, put it back into your original command and tell grep to expect an extended regular expression (-E):
matches=$(IFS=\|; grep -E "^($*) [0-9]+" --count phonelist.txt)
The command substitution $() is effectively its own subshell, so the modified IFS value will not “escape” into later parts of the script.