1) Link 2 Arduino boards with wifi shields (we need wifi shields right?) such that if line of code is run on one, a light will activate on another
Yes this can be done. The noise detector arduino will be the (client) and the light activation arduino will be the (server). If you need code examples, I can help. It took me a two weeks to figure this out, as the library examples that come on the arduino library aren't very clear on how to incorporate this. If you've never used an arduino WiFi shield, I can tell you upgrading the firmware is a pain. Be prepared to spend a little time doing this, otherwise the WiFi shield won't work at all.
2) Detect the decibel level of a gunshot, or should we use frequency?
I don't know. It would be easy to detect the sound, but to identify the difference in a gunshot, verse anything else very loud would be.... difficult.
3) Use this detected noise to activate all of the lights in the system.
Cutting on all the lights in the system is easy. Identifying the particular noise that initiates this process will not be easy. In my mind, if someone screams or drops a book, the lights are going to activate.
This is what I would do. Obviously, you want two arduinos to communicate and lights to come on. Why not hook a Mq2 gas sensor to arduino one, and have it detect gas. It would be easy to detect if someone farts (methane), and have the lights flash. If you want it to deal with school safety, you could demonstrate if there was a gas leak in the science building the notification system would work.