Вроде так:
[StructLayout(LayoutKind.Explicit)]
struct MyData
{
[FieldOffset(0)]
[MarshalAs(UnmanagedType.LPArray, SizeConst = 4)]
byte[] bData;
[FieldOffset(0)]
float fData;
};
Ещё можно использовать директивы unsafe для работы с небезопасным кодом. Тогда у Вас и union будут и указатели.