uint8_t data[] = "AA" + String(msg_counter , DEC);

Do you really need it? Can’t that be sent in two pieces?

For the previous solution - sprintf() is flash memory hungry, to save about 1.5kB if that matters then probably better to have a local buffer, load into the buffer with itoa() and use strcat() to build the final c-string