C (gcc), 54
TIL modern x86-64 has instructions for this, and they are wrapped in the _pext_*()
family of compiler intrinsics.
Not the shortest, but perhaps the fastest. Probably this can be golfed more, but this is as far as I got.
Returns the even bits in the most significant 16 bits and the odd bits in the least significant 16 bits of the returned int.
f(i){i=(_pext_u32(i,~0U/3)<<16)+_pext_u32(i,~0U/3*2);}