To solve this optimization problem, we first need to define the decision variables, the objective function, and the constraints based on the given information.

- Decision Variables:
  - \(x_1\): Number of eggs benedicts to make.
  - \(x_2\): Number of hashbrowns to make.

- Objective Function: Maximize profit.
  - Profit per eggs benedict = $4
  - Profit per hashbrown = $2
  - Total Profit = \(4x_1 + 2x_2\)

- Constraints:
  - Butter constraint: Each eggs benedict requires 10 grams of butter, and each hashbrown requires 5 grams. The total available butter is 5000 grams.
    - \(10x_1 + 5x_2 \leq 5000\)
  - Egg constraint: Each eggs benedict requires 1 egg, and each hashbrown requires 2 eggs. The total available eggs are 600.
    - \(x_1 + 2x_2 \leq 600\)
  - Non-negativity constraints: The number of eggs benedicts and hashbrowns cannot be negative.
    - \(x_1, x_2 \geq 0\)

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
model = Model("Brunch_Optimization")

# Define the decision variables
x1 = model.addVar(name="eggs_benedict", vtype=GRB.CONTINUOUS, lb=0)
x2 = model.addVar(name="hashbrown", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
model.setObjective(4*x1 + 2*x2, GRB.MAXIMIZE)

# Add constraints
model.addConstr(10*x1 + 5*x2 <= 5000, name="butter_constraint")
model.addConstr(x1 + 2*x2 <= 600, name="egg_constraint")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Eggs Benedicts to make: {x1.x}")
    print(f"Hashbrowns to make: {x2.x}")
    print(f"Total Profit: ${model.objVal}")
else:
    print("No optimal solution found")
```