Concatenando cadenas en C, ¿qué método es más eficiente?

Me encontré con estos dos métodos para concatenar cadenas:

Parte comun:

char* first= "First";
char* second = "Second";
char* both = malloc(strlen(first) + strlen(second) + 2);

Método 1:

strcpy(both, first);
strcat(both, " ");       // or space could have been part of one of the strings
strcat(both, second);

Método 2:

sprintf(both, "%s %s", first, second);

En ambos casos el contenido deboth sería"First Second".

Me gustaría saber cuál es más eficiente (tengo que realizar varias operaciones de concatenación), o si conoce una mejor manera de hacerlo.