To solve this problem, we need to formulate a linear programming model that captures all the given constraints and minimizes the total wage bill. Let's denote:

- $x$ as the number of new cooks,
- $y$ as the number of senior cooks.

The objective is to minimize the total wage bill, which can be represented as $500x + 1000y$.

Given constraints are:
1. The weekly wage bill must be kept below $50,000: $500x + 1000y \leq 50,000$
2. A minimum of 30 total cooks are required: $x + y \geq 30$
3. At least 5 senior cooks are needed: $y \geq 5$
4. The number of senior cooks should be at least a third the number of new cooks: $y \geq \frac{1}{3}x$

We also know that $x$ and $y$ must be non-negative since they represent numbers of people.

Here is how we can translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Restaurant_Cooks")

# Define variables
new_cooks = m.addVar(name='new_cooks', vtype=GRB.INTEGER, lb=0)
senior_cooks = m.addVar(name='senior_cooks', vtype=GRB.INTEGER, lb=0)

# Set the objective function: minimize the wage bill
m.setObjective(500*new_cooks + 1000*senior_cooks, GRB.MINIMIZE)

# Add constraints
m.addConstr(500*new_cooks + 1000*senior_cooks <= 50000, name='wage_bill_limit')
m.addConstr(new_cooks + senior_cooks >= 30, name='total_cooks_minimum')
m.addConstr(senior_cooks >= 5, name='senior_cooks_minimum')
m.addConstr(3*senior_cooks <= new_cooks, name='senior_to_new_ratio')

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: New Cooks = {new_cooks.x}, Senior Cooks = {senior_cooks.x}")
    print(f"Total wage bill: ${500*new_cooks.x + 1000*senior_cooks.x}")
else:
    print("No optimal solution found")
```