The ANSI-C standard states that this computation has to be done with int arithmetic, so no, there is no option to explicitly disable this part of the ANSI C specification.
Realistically, you will have to perform some sort of cast, either by an explicit cast to one of the arguments or by an implicit cast by assigning iFac1 or iFac2 to a long first and then performing the computation with this new local variable.
unsigned long lResult; // 32bit
unsigned int iFac1 = 0x1000, iFac2 = 0x1000; // 16bit
void fun(void) {
lResult = iFac1 * (unsigned long)iFac2;
}
void fun2(void) {
unsigned long local= iFac2;
lResult = iFac1 * l;
}
Both of these operations result in a simple EMUL for the multiplication, so it generates less code than without the cast.