C++, 331 291 282 270 268 bytes, Version 2 = 178 176 150 149148 bytes
-40 bytes thanks to Bruce Forte
-3839 bytes thanks to Zacharý
#include<string>
#define L length()
using S=std::string;
Sstring;S m(S a,S b){S c;for(int i=0;i<(a.L<b.L?a.L:b.L);++i)c+=(a[i]-32)*(b[i]-32)%95+32;return c;}