To solve this optimization problem, we need to define the decision variables, objective function, and constraints. Let's break down the problem:

* Decision variables: 
  - B = number of burgers sold
  - S = number of sandwiches sold

* Objective function: Maximize profit = $4.5B + $5S

* Constraints:
  - B ≥ 100 (at least 100 burgers must be sold)
  - S ≥ 80 (at least 80 sandwiches must be sold)
  - B ≤ 120 (at most 120 burgers can be made)
  - S ≤ 100 (at most 100 sandwiches can be made)
  - B + S ≤ 200 (at most 200 items can be cooked in total)

Now, let's translate these into Gurobi code:

```python
from gurobipy import *

# Create a model
m = Model("FastFoodOptimization")

# Define the decision variables
B = m.addVar(lb=100, ub=120, vtype=GRB.CONTINUOUS, name="burgers")
S = m.addVar(lb=80, ub=100, vtype=GRB.CONTINUOUS, name="sandwiches")

# Define the objective function
m.setObjective(4.5*B + 5*S, GRB.MAXIMIZE)

# Add constraints
m.addConstr(B + S <= 200, "total_items_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Burgers: {B.x}")
    print(f"Sandwiches: {S.x}")
    print(f"Maximum profit: ${4.5*B.x + 5*S.x:.2f}")
else:
    print("No optimal solution found")
```