No ... allora il codice dovrebbe essere

codice:
void inserire(char *s1, char *s2, char *s3, int i1, int i2)
{
  char *p1= s1+i1, *p2=s2+i2;

  while (*p1) *s3++=*p1++;
  while (*p2) *s3++=*p2++;

  *s3=0;
}
Ovviamente nessun controllo di buffer overflow e' fatto sulla stringa di destinazione.

(Ma il codice che avevi proposto non lo avevi provato?)