To solve this optimization problem, we need to define the decision variables, the objective function, and the constraints.

Let's denote:
- $B$ as the number of blueberry smoothies made.
- $C$ as the number of chocolate smoothies made.

The objective is to maximize profit. Given that a blueberry smoothie makes $2 and a chocolate smoothie makes $3, the objective function can be written as:

Maximize: $2B + 3C$

Now, let's define the constraints based on the preparation and blending times available:
1. Preparation time constraint: Each blueberry smoothie requires 3 minutes of preparation, and each chocolate smoothie requires 5 minutes of preparation. The total preparation time available is 1000 minutes.
   - $3B + 5C \leq 1000$
2. Blending time constraint: Each blueberry smoothie requires 2 minutes of blending, and each chocolate smoothie requires 1 minute of blending. The total blending time available is 750 minutes.
   - $2B + C \leq 750$

Additionally, we have non-negativity constraints because the number of smoothies cannot be negative:
- $B \geq 0$
- $C \geq 0$

We will use Gurobi to solve this linear programming problem in Python.

```python
from gurobipy import *

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

# Define decision variables
B = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Blueberry_Smoothies")
C = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Chocolate_Smoothies")

# Set the objective function
m.setObjective(2*B + 3*C, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*B + 5*C <= 1000, "Preparation_Time")
m.addConstr(2*B + C <= 750, "Blending_Time")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Blueberry Smoothies: {B.x}")
    print(f"Chocolate Smoothies: {C.x}")
    print(f"Maximum Profit: ${2*B.x + 3*C.x:.2f}")
else:
    print("No optimal solution found.")
```