No, there is no better way to map individual substrings to array indices than:
split(str,tmp); for (i in tmp) arr[tmp[i]]
FWIW, if you don't like this approach to execute your last pseudocode:
awk -vs="1,4,55" 'BEGIN{split(s,tmp,/,/); for (i in tmp) arr[tmp[i]]} $3 in arr{action}'
then another way to get the same behavior is
awk -vs=",1,4,55," 'index(s,","$3","){action}'
source share