For you first requirement, why not simply use the [ ] operator?
wchar_t character0 = text0[1]; // 'x'
wchar_t character1 = text1[2]; // '気'
Your second requirement cannot be satisfied as written. text has enough room for exactly 5 wchar_t: L'b', L'r', L'u', L's', and L'\0'. While it is possible for you replace the last character with the L'h', the result is no longer a string because it is not terminated properly. Attempting to process it as a string will cause undefined behavior.
If you change the definition of text to allow extra space, such as text[10], there will be room to add the new character and move the terminator over one. Your helper function could look something like
void my_concatenate(whar_t *dest, wchar_t letter)
{
static wchar*t my_str[2]; // initialized by virtue of static
my_str[0] = letter;
wcscat(dest, my_str);
return;
}