With zsh and GNU grep or compatible:
zip file.zip ${(0)"$(grep -l --null 005010X222 ./*.CLM_01)"}
If your grep doesn't take a --null but you can guarantee none of the file names contain newline characters:
zip file.zip ${(f)"$(grep -l 005010X222 ./*.CLM_01)"}
With other POSIX-like shells, you could do the same with the split+glob operator:
IFS='
' # split on newline
set -o noglob # disable glob
zip file.zip $(grep -l 005010X222 ./*.CLM_01)
If you have bsdtar, you can also pass the list of files null-delimited on its stdin with --null -T -:
grep -l --null 005010X222 ./*.CLM_01 | bsdtar --null -T - -acf file.zip
The GNU implementation of grep can also look for the *.CLM_01 files recursively by itself with:
grep --include='*.CLM_01' -rl --null 005010X222 . |
bsdtar --null -T - -acf file.zip
That one isn't affected by the limit on the number of arguments that is passed to a command since the file paths are not passed as arguments to grep or bsdtar, but note that contrary to the glob-based solutions above, it will also consider hidden files.
With GNU grep, see also grep -L 005010X223 to list the files that do not contain 005010X223 instead of grep -l 005010X222 to list the ones that do contain 005010X222.
.zipfile or all files should go into one.zipfile?