Arduino shield request from multiple servers

    if(client2.available() == 0) delay(5000);

You seem completely fixated on doing nothing as much as possible. Someday, I hope you wake up and smell the coffee. When there is something to do, such as read data from the client2 instance, do it. When there is nothing to do, look for something else to do.

void loop(void) {
  EthernetClient client2;
  delay(1000);

Here's another example. On EVERY pass through loop(), you waste a full second. Why?