Give them a new family instance variable where you save their type as string or whatever (so for all big ones it is "big", for the small ones it is "small").
For the second problem - you need to understand how picking works. You start with all objects picked basically and then reduce the selection continuously by placing your conditions.
So if you want to select two different instances of one family in one event but you only have two different UIDs to separate them from the rest, you need to do a "pick by evaluate" and then do
pick by evaluate: family.uid = someUID1 | family.uid = someUID2
This way you pick the instances with someUID1 and someUID2. The "|" is the logical or operator in construct.
If the instances are different objects like sprite1 and sprite2, you can easily do it as you've written:
pick something1 where uid = someUID
pick something2 where uid = someUID2 - destroy something1, destroy something2
Don't know about pin performance, less frequent updating should use up less resources I guess, but... can't say for sure.
3) you probably need to pin it manually, but you should try it out and see what happens, when you don't pin it. In case you want to pin it automatically on creation, but have different events creating stuff, you can use an event like:
on created (family or sprite) - pin flag to (family or sprite)
4) move downward = bullet behavior with bullet angle of motion set to 90°; you can deactivate setting the angle, so that the bullet behavior does not rotate your object by 90°
Control when it is created: there is a timer behavior, use it