Have you used Serial.print to check that string is what you think it is? Do you set the cursor between writes (lcd.home() or something)? It may be that concatenation happens because you don't return the cursor and/or clear the lcd between writes.
Anyway, the way use the "string" variable seems suspicious:
string = "";
string = Chord[navigator];
strcat(string, " : ");
strcat(string, Camelot[navigator]);
If string is of type "char *", you need to allocate memory for it.
This is unnecessary
string = "";
because the after the next line string holds the value of Chord[navigator].
string = Chord[navigator];
If Chord[navigator] holds a pointer to a string, has it enough memory allocated for " : " and the value of Camelot[navigator]?
strcat(string, " : ");
strcat(string, Camelot[navigator]);
The code may seem to work even if you haven't allocated enough memory for string. if it overflows (strcat writes beyond the allocated memory), depending on what variables etc. the memory holds it may or may not crash. But you really should make sure you have allocated enough memory, e.g.,
char string[20]; // allocate enough memory for Chord[navigator], " : " and Camelot[navigator]
strcpy(string, Chord[navigator]);
strcat(string, " : ");
strcat(string, Camelot[navigator]);