No, not with a simple foo structure.
C requires that array elements have their own addresses, therefore in order to have such a array you will have to pack a single byte in C code.
typedef struct {
unsigned char my_low_location : 2;
unsigned char my_low_WATCHDOG : 2;
unsigned char my_high_location : 2;
unsigned char my_high_WATCHDOG : 2;
} foo;
foo my_array[500];
Alternatively, and you can also use an array of bytes and then work with macros to implement the accesses to have a direct indexed access.
Daniel