{2,} means the coincidence of characters in front of him for two or more times. Therefore, if you want to match the HALL pattern, you need to put parentheses around it, and it also seems that you do not mean the consistent HALL pattern, so you need to substitute the pattern a little. The following should do the job:
grepl("(.*HALL.*){2,}", "HALL #1 HALL #2 HALL #3") [1] TRUE
source share