Very nice! That would be hard to beat.
Using tolower() will deal with uppercase letters as well.
Code:
int i, n, flags[26];
char *str1="Hello";
char *str2="World";
for (i=0; i<26; flags[i++]=0)
  ;
for (i=0; str1[i]; i++) {
  n = tolower(str1[i]) - 'a';
  if (n >= 0 && n < 26)
    flags[n] = 1;
}
for (i=0; str2[i]; i++) {
  n = tolower(str2[i]) - 'a';
  if (n >= 0 && n < 26 && flags[n])
    putchar(str2[i]);
}